iT邦幫忙

2023 iThome 鐵人賽

2
DevOps

跟著菜鳥手把手用Docker建立服務系列 第 28

Day28 - 菜鳥們一起深入探討 Docker - Cache 篇

  • 分享至 

  • xImage
  •  

在我們考慮如何減少Image Size同時,也要考慮到建立Image的效率,如何快速建立也是我們要考慮到的,科技始於人性的情況下,不能缺少就是效率與成本,接下來我們來探討Cache如何提高我們建立Image的效率/images/emoticon/emoticon08.gif


Cache 的功用是什麼:

  • Build image 第一次會正常執行每一個指令,第二次如果發現是同一個 commit 上,執行同一個指令,且結果推測不會變的時候,會把前一次執行結果的 commit 直接拿來用,並標上 CACHED 訊息
  • 當你建立Image時,會去判斷是否有做任何修改,沒做任何修改就用Cache機制拿之前建立好的繼續利用,如果有做修改的話,就重新建立

我們透過實作來讓大家了解 Cache 的功用

app.py

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello, world2323!'

Python Falsk Dockerfile

FROM python:3.9.5-slim

COPY app.py /src/app.py

RUN pip install flask

WORKDIR /src
ENV FLASK_APP=app.py

EXPOSE 5000

CMD ["flask", "run", "-h", "0.0.0.0"]

如果我修改了app.py 並且重新建立Image以下資訊如圖
https://ithelp.ithome.com.tw/upload/images/20240208/20158512gwXWkgbsjn.png

  • 你會發現 COPY app.py /src/app.py 以下指令都重新建立(沒標上 CACHED 訊息)

我修改一下Python Falsk Dockerfile

FROM python:3.9.5-slim

RUN pip install flask

WORKDIR /src
ENV FLASK_APP=app.py

COPY app.py /src/app.py

EXPOSE 5000

CMD ["flask", "run", "-h", "0.0.0.0"]

如果我修改了app.py 並且重新建立Image以下資訊如圖
https://ithelp.ithome.com.tw/upload/images/20240208/20158512zEbCBpm03R.png

  • 你會發現 RUN pip install flask 跟 WORKDIR /src 標上 CACHED 訊息,代表這兩個是沿用之前建立的資料,而且只針對COPY app.py /src/app.py 重新建立

Cache 重點說明:

  • 我們把常修改的指令放在不常改的指令後面
  • app.py是我們常修改的的檔案,如果把 COPY app.py /src/app.py 的指令放在很前面,代表著在COPY app.py /src/app.py後面的指令都要重新執行並且建立,可以查看上面兩個Python Falsk Dockerfile 差別

其實要把你的系統或者程式當作你在經營一間公司的老闆,不管怎樣都要以省還有快速為目標,也就是CP直要高,CP值高不就是我們大家所追的嗎,只要能對自己系統有幫助,哪怕只是小小的改變,我們都要值得去了解/images/emoticon/emoticon12.gif


參考資料:
最佳化 Dockerfile - 活用 cache
Docker容器技术从入门到精通


上一篇
Day27 - 菜鳥們一起深入探討 Docker - Copy 篇
下一篇
Day29 - 菜鳥們一起深入探討 Docker - User 安全篇
系列文
跟著菜鳥手把手用Docker建立服務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言